# frozen_string_literal: true

require "ruby_event_store/rom"

MIGRATIONS_PATH = "db/migrate".freeze

desc "Setup ROM EventRespository environment"
task "db:setup" do
  Dir.chdir(Dir.pwd)
  ROM::SQL::RakeSupport.env = ::RubyEventStore::ROM.rom_container(:sql, ENV["DATABASE_URL"])
end

desc "Copy RubyEventStore SQL migrations to db/migrate"
task "db:migrations:copy" => "db:setup" do
  # Optional data type for `data` and `metadata`
  data_type = ENV["DATA_TYPE"]

  Dir[File.join(File.dirname(__FILE__), "../../../../", MIGRATIONS_PATH, "/*.rb")].each do |input|
    contents = File.read(input)
    name = File.basename(input, ".*").sub(/\d+_/, "")

    re_data_type = /(ENV.+?DATA_TYPE.+?\|\|=\s*)['"](jsonb?|text)['"]/

    if data_type && contents =~ re_data_type
      # Search/replace this string: ENV['DATA_TYPE'] ||= 'text'
      contents = contents.sub(re_data_type, format('\1"%<data_type>s"', data_type: data_type))
      name += "_with_#{data_type}"
    end

    output = ROM::SQL::RakeSupport.create_migration(name)

    File.write output, contents

    puts "<= migration file created #{output}"
  end
end
